package com.sky.controller.user;

import com.sky.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

/**
 * 这里是用户端用来查看店铺状态的接口
 * 也能看出来controller层都是单独写的商家端和用户端的controller包括路径;而里面service层就都放到一起,
 *      因为你不同的端也可以调用相同的查询方法,比如菜品分类,在商家端定义的方法,到了用户端,实现功能完全一样就可以直接调用
 * @author 岳海
 */
@RestController("userShopController")
//这个是@ResponseBody + @Controller这两个注解组合,我还以为是@RequestBody,认错了
//这里还可以用来指定注入到容器中类的名称,默认是首字母小写;;可以指定别名是因为本身@Controller注解就可以,看spring笔记,p107
//这里为啥要单独起个别名,使用默认的首字母小写就可以了,,
    // 因为在用户端usr目录下也有一个同名的ShopController类,这样设置别名能避免冲突
@RequestMapping("/user/shop")
@Api(tags = "店铺相关接口")
@Slf4j
public class ShopController {

    //把下面的字符串SHOP_STATUS,设计成一个常量;然后直接调用对应的常量名就可以
        //我感觉这个店铺的状态常量也可以直接,放到StatusConstant常量类中就可以,
        // 不过一个普通字符串,也不通用,所以没必要单独定义一个字符串提示信息的常量类;;
    private static final String KEY = "SHOP_STATUS";

    @Autowired
    private RedisTemplate redisTemplate;  //注入redis对象


    /**
     * 获取店铺的营业状态
     * @return
     */
    @GetMapping("/status")
    @ApiOperation("获取店铺的营业状态")
    public Result<Integer> getStatus(){
        //这里直接查店铺的状态,就不需要参数;直接通过redis对象,直接获取
            //这个KEY是上面单独提出来的常量,"SHOP_STATUS"
        Integer status = (Integer) redisTemplate.opsForValue().get(KEY);
        log.info("获取到店铺的营业状态为:{}",status == 1 ? "营业中" : "打烊中");

        return Result.success(status);
    }




}
